import { AppDataSource } from './data.source'
import { User } from './entity/User'

// 首先初始化
AppDataSource.initialize().then(async () => {
    console.log('initialize');

    // // 保存一个新用户
    // const user = new User();
    // user.firstName = 'zhang'
    // user.lastName = 'can'
    // user.age = 18
    // user.email = '2222222@qq.com'
    // user.isActive = true
    // await AppDataSource.manager.save(user);

    // // 查找一个用户
    // const foundUser = await AppDataSource.manager.findOne(User, {
    //     where: {
    //         firstName: user.firstName
    //     }
    // })
    // console.log('找到用户', foundUser)

    // // 更新用户
    // if (foundUser) {
    //     foundUser.age = 28;
    //     await AppDataSource.manager.save(foundUser)
    //     console.log("用户已经更新", foundUser)
    // }

    // // 删除用户
    // if (foundUser) {
    //     await AppDataSource.manager.remove(foundUser)
    //     console.log('用户被删除', foundUser);
    // }

    // // 批量插入
    // const users = [
    //     {
    //         firstName: 'zhang',
    //         lastName: 'can',
    //         age: 18,
    //         email: '1223@qq.com',
    //         isActive: true,
    //     },
    //     {
    //         firstName: 'zhang2',
    //         lastName: 'can2',
    //         age: 20,
    //         email: '12333@qq.com',
    //         isActive: true,
    //     },
    //     {
    //         firstName: 'xiao',
    //         lastName: 'ming',
    //         age: 22,
    //         email: '1244443@qq.com',
    //         isActive: true,
    //     }
    // ]
    // await AppDataSource.manager.insert(User,users);


    // // 查询并记数
    // const [allUsers,usersCount] = await AppDataSource.manager.findAndCount(User);
    // console.log('查询并计数',allUsers,usersCount);

    // // 查找用户，没找到返回null
    // const findUser1 = await AppDataSource.manager.findOne(User,{where:{email:"1244443@qq.com"}});
    // console.log('找到用户',findUser1);

    // // 查找用户2,没找到返回null
    // const findUser2 = await AppDataSource.manager.findOneBy(User,{email:"12333@qq.com"});
    // console.log('找到用户2',findUser2);

    // // 没找到抛出异常
    // try{
    //     const findUser3 = await AppDataSource.manager.findOneByOrFail(User,{email:"1244443@qq.com"})
    //     console.log('找到用户3',findUser3);
    // }catch(Err){
    //     console.error(Err);
    // }

    // // sql语句
    // const results = await AppDataSource.query(`
    //     select * from user    
    // `)
    // console.log(results);


    // 查询构建器   select user.first,user.lastName from user
    // 创建一个针对User实合格的查询 构建起，并将实体类命名为user
    const queryBuilder = AppDataSource.manager.createQueryBuilder()
    // 选择查询中返回的字段
    queryBuilder.select(['user.firstName', 'user.lastName']);
    // 添加更多的字段
    queryBuilder.addSelect('user.age');
    // 指定查询的主表
    queryBuilder.from(User, 'user');
    // 通过where指定查询条件,查询user id为2的
    queryBuilder.where("user.id =:id", { id: 1 })
    // 还可以添加额外的条件
    queryBuilder.andWhere("user.isActive=:isActive", { isActive: true })
    // 指定要返回一条还是多条
    const queryBuilder_user = await queryBuilder.getOne();
    const queryBuilder_users = await queryBuilder.getMany();
    console.log(queryBuilder_user);
    console.log(queryBuilder_users);

    // 删除
    queryBuilder.delete().from(User).where("id=:id",{id:2}).execute();
})